package com.hex.ds.hdrs.period.task.util;

import cn.hutool.core.util.StrUtil;
import com.hex.ds.hdrs.common.utils.HdrsDateUtil;
import com.hex.ds.hdrs.period.task.po.PeriodTask;
import lombok.extern.slf4j.Slf4j;
import org.apache.commons.lang3.StringUtils;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Date;
import java.util.List;

@Slf4j
public class FilterTaskHelper {

    public static boolean isOverTsTask(PeriodTask periodTask) {
        if (periodTask == null || StrUtil.isBlank(periodTask.getOverPlanDuration()) || periodTask.getOverPlanDuration().equals("0")) {
            return false;
        }
        return getTimeOut(periodTask) < HdrsDateUtil.getMillis(new Date());
    }

    private static Long getTimeOut(PeriodTask task) {
        long execStartTime = HdrsDateUtil.strToLong(task.getExecStTs(), HdrsDateUtil.YYYY_MM_DDHHMISS);
        long planExecDuration = Long.valueOf(StrUtil.blankToDefault(task.getPlanExecDuration(), "0")) * 1000;
        long overPlanDuration = Long.valueOf(task.getOverPlanDuration()) * 1000;
        return execStartTime + planExecDuration + overPlanDuration;
    }

    public static List<PeriodTask> filterTask(List<PeriodTask> taskList, PeriodTask qryParam) {
        if (!StringUtils.isEmpty(qryParam.getBizDate())) {
            return filterTaskByBizDate(taskList, qryParam.getBizDate());
        } else if (!StringUtils.isEmpty(qryParam.getJobCode())) {
            return filterTaskByJobCode(taskList, qryParam.getJobCode());
        } else if (!StringUtils.isEmpty(qryParam.getTaskCode())) {
            return filterTaskByTaskCode(taskList, qryParam.getTaskCode());
        } else if (!StringUtils.isEmpty(qryParam.getTaskName())) {
            return filterTaskByTaskName(taskList, qryParam.getTaskName());
        } else if (!StringUtils.isEmpty(qryParam.getAppCode())) {
            return filterTaskByAppCode(taskList, qryParam.getAppCode());
        } else if (!StringUtils.isEmpty(qryParam.getMapKey())) {
            return filterTaskByMapKey(taskList, qryParam.getMapKey());
        } else {
            return taskList;
        }
    }

    /**
     * 通过 mapKey 查询
     *
     * @param taskList
     * @param mapKey
     * @return
     */
    public static List<PeriodTask> filterTaskByMapKey(List<PeriodTask> taskList, String mapKey) {
        log.info("通过 mapKey 查询【filterTaskByBizDate】mapKey：{}", mapKey);
        List<PeriodTask> resTaskList = new ArrayList<>();
        for (PeriodTask task : taskList) {
            if (task.getMapKey().contains(mapKey)) {
                resTaskList.add(task);
            }
        }
        return resTaskList;
    }

    /**
     * 通过 业务日期 查询
     *
     * @param taskList
     * @param bizDate
     * @return
     */
    public static List<PeriodTask> filterTaskByBizDate(List<PeriodTask> taskList, String bizDate) {
        log.info("通过 业务日期 查询【filterTaskByBizDate】bizDate：{}", bizDate);
        List<PeriodTask> resTaskList = new ArrayList<>();
        for (PeriodTask task : taskList) {
            if (task.getBizDate().contains(bizDate)) {
                resTaskList.add(task);
            }
        }
        return resTaskList;
    }

    /**
     * 通过 作业编码 查询
     *
     * @param taskList
     * @param jobCode
     * @return
     */
    public static List<PeriodTask> filterTaskByJobCode(List<PeriodTask> taskList, String jobCode) {
        log.info("通过 作业编码 查询【filterTaskByBizDate】jobCode：{}", jobCode);
        List<PeriodTask> resTaskList = new ArrayList<>();
        for (PeriodTask task : taskList) {
            if (task.getJobCode().contains(jobCode.toUpperCase())) {
                resTaskList.add(task);
            }
        }
        return resTaskList;
    }

    /**
     * 通过 任务编码 查询
     *
     * @param taskList
     * @param taskCode
     * @return
     */
    public static List<PeriodTask> filterTaskByTaskCode(List<PeriodTask> taskList, String taskCode) {
        log.info("通过 任务编码 查询【filterTaskByBizDate】taskCode：{}", taskCode);
        List<PeriodTask> resTaskList = new ArrayList<>();
        for (PeriodTask task : taskList) {
            if (task.getTaskCode().contains(taskCode.toUpperCase())) {
                resTaskList.add(task);
            }
        }
        return resTaskList;
    }

    /**
     * 通过 任务名称 查询
     *
     * @param taskList
     * @param taskName
     * @return
     */
    public static List<PeriodTask> filterTaskByTaskName(List<PeriodTask> taskList, String taskName) {
        log.info("通过 任务名称 查询【filterTaskByBizDate】taskName：{}", taskName);
        List<PeriodTask> resTaskList = new ArrayList<>();
        for (PeriodTask task : taskList) {
            if (task.getTaskName().contains(taskName)) {
                resTaskList.add(task);
            }
        }
        return resTaskList;
    }

    /**
     * 通过 应用编码 查询
     *
     * @param taskList
     * @param appCode
     * @return
     */
    public static List<PeriodTask> filterTaskByAppCode(List<PeriodTask> taskList, String appCode) {
        log.info("通过 应用编码 查询【filterTaskByBizDate】appCode：{}", appCode);
        List<PeriodTask> resTaskList = new ArrayList<>();
        for (PeriodTask task : taskList) {
            if (task.getAppCode().contains(appCode)) {
                resTaskList.add(task);
            }
        }
        return resTaskList;
    }

    public static void main(String[] args) {
        final List<Integer> integers = Arrays.asList(1, 2, 3);
        integers.stream()
                .filter(integer -> integer == 1)
                .forEach(System.out::println);
    }
}
